博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
react学习系列之ajax
阅读量:6403 次
发布时间:2019-06-23

本文共 1760 字,大约阅读时间需要 5 分钟。

React 组件的数据可以通过 componentDidMount 方法中的 Ajax 来获取,当从服务端获取数据库可以将数据存储在 state 中,再用 this.setState 方法重新渲染 UI。

当使用异步加载数据时,在组件卸载前使用 componentWillUnmount 来取消未完成的请求。

方式一:通过jq或者zepto封装的ajax方法

var UserGist = React.createClass({  getInitialState: function() {    return {      username: '',      lastGistUrl: ''    };  },  componentDidMount: function() {    $.get(this.props.source, function(result) {      var lastGist = result[0];      if (this.isMounted()) {        this.setState({          username: lastGist.owner.login,          lastGistUrl: lastGist.html_url        });      }    }.bind(this));  },  render: function() {    return (      
{this.state.username}'s last gist is
here.
); }});ReactDOM.render(
, document.body);

方式二:fetch api

JavaScript 通过XMLHttpRequest(XHR)来执行异步请求,这个方式已经存在了很长一段时间。虽说它很有用,但它不是最佳API。它在设计上不符合职责分离原则,将输入、输出和用事件来跟踪的状态混杂在一个对象里。而且,基于事件的模型与最近JavaScript流行的Promise以及基于生成器的异步编程模型不太搭(事件模型在处理异步上有点过时了——译者注)。

新的 Fetch API打算修正上面提到的那些缺陷。 它向JS中引入和HTTP协议中同样的原语(即Fetch——译者注)。具体而言,它引入一个实用的函数 fetch() 用来简洁捕捉从网络上检索一个资源的意图。

Fetch 规范 的API明确了用户代理获取资源的语义。它结合ServiceWorkers,尝试达到以下优化:

  • 改善离线体验

  • 保持可扩展性

componentDidMount: function() {    this.serverRequest = fetch(this.props.source).then((res) => {      // res instanceof Response == true.      if (res.ok) {        res.json().then((data) => {          var lastGist = data[0];          if (this.isMounted()) {            this.setState({              username: lastGist.owner.login,              lastGistUrl: lastGist.html_url            });          }        });      } else {        console.log("Looks like the response wasn't perfect, got status", res.status);      }    }, function(e) {      console.log("Fetch failed!", e);    });}

目前支持程度如下:

图片描述
在github上,有基于低版本浏览器的

参考资料

转载地址:http://khnea.baihongyu.com/

你可能感兴趣的文章
动态规划——最长公共子序列(LCS)
查看>>
Hystrix已经停止开发,官方推荐替代项目Resilience4j简介
查看>>
华为mate10pro为全家福准备了各种姿势 你get到了吗
查看>>
Spring源码分析(四)SpringMVC初始化
查看>>
日记(react modal)
查看>>
Mac 安装 GO语言开发环境
查看>>
Node.js EventEmitter解读
查看>>
iOS开发: CocoaPods远程私有仓库的维护升级
查看>>
构建dubbo分布式平台-window安装zookeeper注册中心
查看>>
Qtum量子链周报(11月26日-12月2日)
查看>>
Qtum区块链指南
查看>>
CEO被曝盗窃事件背后,来电科技还能回到发展正轨吗?
查看>>
iOS的Cookie存取看我绝对够!!
查看>>
《架构师之路》(58沈剑) 读书笔记
查看>>
史上最烂的开发项目长啥样:苦撑12年,600多万行代码...
查看>>
Java枚举(三)
查看>>
数据库调研:memcached
查看>>
综合扫描及安全评估
查看>>
Web 性能优化: 图片优化让网站大小减少 62%
查看>>
Jenkins+Spring Boot构建部署
查看>>